8318. Удалите цифры

 

Дано натуральное число n. Удалить в этом числе все цифры 3 и 9, оставив порядок остальных цифр прежним.

Например, число 539013 преобразуется в 501.

 

Вход. Одно натуральное число n (1 ≤ n ≤ 1018).

 

Выход. Удалите из числа n все тройки и девятки, сохранив относительный порядок остальных цифр.

 

Пример входа

Пример выхода

539013

501

 

 

РЕШЕНИЕ

строки

 

Анализ алгоритма

Входное число n читаем в переменную s типа string. В строке s следует удалить цифры 3 и 9. Рассмотрим два подхода решения задачи:

1. Проходим по строке и удаляем символы ‘3’ и ‘9’ при помощи метода erase;

2. Объявим пустую строку res. Проходим по входной строке s и приписываем в конец res каждый символ s[i], не равный 3 и 9.

 

Реализация алгоритма – char массив

Объявим символьный массив s.

 

char s[20];

int i, j;

 

Читаем входную строку.

 

gets(s);

 

Устанавливаем указатели i и j на начало строки.

 

j = 0;

for(i = 0; i < strlen(s); i++)

 

Каждый символ s[j], не равный ‘3’  и ‘9’, копируем  s[j].

 

  if (s[i] != '3' && s[i] != '9') s[j++] = s[i];

 

Ставим 0 байт в конце результирующей строки.

 

s[j] = 0;

 

Выводим ответ.

 

puts(s);

 

Реализация алгоритма – форматированный ввод

Объявим входной массив s, результирующий res и вспомогательный temp.

 

char s[20], res[20], temp[20];

int i, j;

 

Читаем префикс подстроки, состоящей из цифр 3 и 9.

 

scanf("%[39]", temp);

 

Читаем последовательность символов, среди которых нет цифр 3 и 9.

 

while (scanf("%[^39]", temp) == 1)

{

 

Конкатинируем temp к res.

 

  strcat(res, temp);

 

Читаем последовательность символов, состоящих из цифр 3 и 9.

 

  scanf("%[39]", temp);

}

 

Выводим ответ.

 

puts(res);

 

Реализация алгоритма – циклы

 

#include <stdio.h>

 

long long i, n, d, ten, res;

 

int main(void)

{

  scanf("%lld",&n);

  res = 0;

  ten = 1;

  while(n > 0)

  {

    d = n % 10;

    if (d != 3 && d != 9)

    {

      res = res + ten * d;

      ten = ten * 10;

    }

    n = n / 10;

  }

 

  if (res != 0) printf("%lld\n",res);

  return 0;

}

 

Реализация алгоритма – C++

Объявим рабочую строку s.

 

string s;

 

Читаем строку.

 

cin >> s;

 

Проходим по строке s, удаляем символы ‘3’ и ‘9’ при помощи метода erase.

 

for(int i = 0; i < s.size(); i++)

  if (s[i] == '3' || s[i] == '9')

  {

    s.erase(s.begin()+i);

    i--;

  }

 

Выводим результирующую строку.

 

cout << s;

 

Реализация алгоритма – C++, второе решение

 

#include <iostream>

#include <string>

using namespace std;

 

string s, res;

 

int main(void)

{

  cin >> s;

  res = "";

  for(int i = 0; i < s.size(); i++)

    if (s[i] != '3' && s[i] != '9') res = res + s[i];

  cout << res << endl;

  return 0;

}

 

Java реализация

 

import java.util.*;

 

public class Main

{

  public static void main(String[] args)

  {

    Scanner con = new Scanner(System.in);

    String s = con.nextLine();

    s = s.replaceAll("[39]","");

    System.out.println(s);

    con.close();

  }

}